/********************************************
 * 功能说明: 
 * 模块名称: 
 * 系统名称: 
 * 软件版权: Frank
 * 系统版本: 1.0.0
 * 开发人员: Frank
 * 开发时间: 2019/9/20 14:20
 * 审核人员: 
 * 相关文档: 
 * 修改记录: 修改日期 修改人员 修改说明
 *********************************************/
package com.spring.arch.job.common.handler;

import com.spring.arch.job.service.JobInfoService;
import com.spring.arch.job.model.JobInfo;
import com.spring.arch.job.service.JobInfoService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.Arrays;
import java.util.List;

/**
 * 暂停任务删除作业处理器
 * @author Frank
 * @version 1.0.0.1
 * @since JDK 1.8
 */
@JobHandler(value="suspendTaskDelHandler")
@Component
@Slf4j
public class SuspendTaskDelHandler extends IJobHandler {

    @Autowired
    private JobInfoService jobInfoService;

    /**
     * 执行任务
     * @param param 需要删除的handler名称，多个逗号隔开
     * @return 执行结果
     * @throws Exception 执行异常
     */
    @Override
    public ReturnT<String> execute(String param) throws Exception {
        log.debug("任务暂停删除作业处理器|start|param={}", param);
        if (StringUtils.isNotBlank(param)) {
            String[] handlerNames = param.split(",");
            // 查询所有停止的任务
            List<JobInfo> jobs = jobInfoService.queryAllSuspendJob();
            if (!CollectionUtils.isEmpty(jobs)) {
                for (JobInfo job : jobs) {
                    if (Arrays.asList(handlerNames).contains(job.getExecutorHandler())) {
                        try {
                            jobInfoService.deleteOne(job);
                            log.debug("任务暂停删除作业处理器|删除成功|任务信息={}", job);
                        } catch (Exception e) {
                            log.debug("任务暂停删除作业处理器|删除失败|任务信息={}", job, e);
                        }
                    }
                }
            }
        }
        log.debug("任务暂停删除作业处理器|end");
        return ReturnT.SUCCESS;
    }
}
